package com.evan.review.architecture.mvp.contract;

import com.evan.review.architecture.mvp.model.User;

import java.util.List;

/**
 * MVP架构中的契约接口
 * 定义View和Presenter之间的交互
 */
public interface UserContract {

    /**
     * View接口，由Activity/Fragment实现
     * 定义视图需要实现的方法
     */
    interface View {
        /**
         * 显示用户列表
         */
        void showUsers(List<User> users);
        
        /**
         * 显示用户详情
         */
        void showUserDetails(User user);
        
        /**
         * 显示加载中状态
         */
        void showLoading();
        
        /**
         * 隐藏加载中状态
         */
        void hideLoading();
        
        /**
         * 显示错误信息
         */
        void showError(String message);
        
        /**
         * 显示成功信息
         */
        void showSuccess(String message);
        
        /**
         * 显示空列表状态
         */
        void showEmptyView();
        
        /**
         * 隐藏空列表状态
         */
        void hideEmptyView();
        
        /**
         * 导航到添加用户界面
         */
        void navigateToAddUser();
        
        /**
         * 导航到编辑用户界面
         */
        void navigateToEditUser(User user);
    }
    
    /**
     * Presenter接口，由Presenter实现
     * 定义Presenter需要实现的方法
     */
    interface Presenter {
        /**
         * 加载所有用户
         */
        void loadUsers();
        
        /**
         * 加载活跃用户
         */
        void loadActiveUsers();
        
        /**
         * 搜索用户
         */
        void searchUsers(String query);
        
        /**
         * 获取用户详情
         */
        void getUserDetails(long userId);
        
        /**
         * 添加用户
         */
        void addUser(User user);
        
        /**
         * 更新用户
         */
        void updateUser(User user);
        
        /**
         * 删除用户
         */
        void deleteUser(long userId);
        
        /**
         * 切换用户活跃状态
         */
        void toggleUserActiveStatus(long userId);
        
        /**
         * 开始添加用户流程
         */
        void startAddUser();
        
        /**
         * 开始编辑用户流程
         */
        void startEditUser(long userId);
        
        /**
         * 绑定视图
         */
        void attachView(View view);
        
        /**
         * 解绑视图
         */
        void detachView();
    }
} 